import moment from 'moment';
/**
 * 将Date对象或者合法的日期字符串格式化成'YYYY-MM-DD'
 * @param {Date|string} datetime
 * @returns {string}
 */
export function formatDate(datetime: Date | string): string {
    return moment(datetime).format('YYYY-MM-DD');
}

/**
 * 将Date对象或者合法的日期字符串格式化成'HH:mm:ss'
 * @param {Date|string} datetime
 * @returns {string}
 */
export function formatTime(datetime: Date | string): string {
    return moment(datetime).format('HH:mm:ss');
}

/**
 * 将Date对象或者合法的日期字符串格式化成'YYYY-MM-DD HH:mm:ss'
 * @param {Date|string} datetime
 * @returns {string}
 */
export function formatDataTime(datetime: Date | string): string {
    return moment(datetime).format('YYYY-MM-DD HH:mm:ss');
}

/**
 * 将Date格式化成带T和Z关键字的UTC日期字符串,如:
 * "2020-08-24T14:05:00+08:00" 北京时间
 * 或者
 * "2020-08-24T09:05:00Z" 标准时间
 * @param {Date|string} datetime
 */
export function formatUTC(datetime: Date | string): string {
    return moment(datetime).format('YYYY-MM-DDTHH:mm:ssZ');
}

/**
 * 将Date格式化成带T和Z关键字的UTC日期字符串,如:
 * "2020-08-24T14:05:00+08:00" 北京时间
 * 或者
 * "2020-08-24T09:05:00Z" 标准时间
 * @param {Date|string} datetime
 */
export function formatNoTimeZoneUTC(datetime: Date | string): string {
    return moment(datetime).format('YYYY-MM-DDTHH:mm:ss') + 'Z';
}

/**
 * 返回指定年月日的UTC日期字符串.
 * 不传的年月则使用系统当前日期的对应值.
 * 日默认为1.
 */
export function formatDateOfDay(
    year: number = moment().year(),
    month: number = moment().month(),
    day: number = 1,
): string {
    return getMomentBySpecificValue(year, month, day).format('YYYY-MM-DD');
}

/**
 * 返回指定年月日的Moment对象.
 * 不传的年月则使用系统当前日期的对应值.
 * 日默认为1.
 */
export function getMomentBySpecificValue(
    year: number = moment().year(),
    month: number = moment().month(),
    day: number = 1,
): moment.Moment {
    return moment()
        .year(year)
        .month(month)
        .date(day);
}

/**
 * 返回指定年月日的上午12:00的日期字符串.
 */
export function getStartOfDay(
    year: number = moment().year(),
    month: number = moment().month(),
    day: number = 1,
): string {
    return moment()
        .year(year)
        .month(month)
        .date(day)
        .startOf('date')
        .format('YYYY-MM-DDTHH:mm:ss')
}

/**
 * 与getStartOfDay行为类似,只是时间相反.
 */
export function getEndOfDay(
    year: number = moment().year(),
    month: number = moment().month(),
    day: number = 1,
): string {
    return moment()
        .year(year)
        .month(month)
        .date(day)
        .endOf('date')
        .format('YYYY-MM-DDTHH:mm:ss')
}
